iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 18
0
自我挑戰組

每天一份前端小作品系列 第 18

【Day18】用JavaScript做巴哈導覽列

  • 分享至 

  • xImage
  •  

本日小作品:
https://codepen.io/linchinhsuan/pen/YzqbvoB

var liArray = document.querySelectorAll(".nav li a");
var len = liArray.length;
for(var i=0;i<len;i++){
    liArray[i].dataset.num = i;
};

用querySelectorAll選取導覽列中的每一個a連結,最終結果會是一陣列,並賦值於變數liArray上。
dataset是可以讓我們自定義的屬性,最終呈現起來會看起來像是data-num="1",基本的規則是會以data-開頭,後面名稱可以自定義。這裡我們使用for迴圈而不是直接寫在html裡面。
透過for迴圈,讓陣列中的每一個a連結的設定一個dataset屬性,名稱叫做num,值則是i。
最終我們就可以得到像是data-num="0"......每一個a連結都有不同的值。

var nav = document.querySelector(".nav");
var box = document.querySelector(".hoverBox");
nav.addEventListener('mouseover',function(e){
    if(e.target.nodeName !== 'A'){return};
    var num = e.target.dataset.num;
    box.style.opacity = 1;
    box.style.left = (num)*64 + "px";
},false)

在導覽列上做滑鼠移入的事件監聽,當滑鼠移動到非a連結的時候,則觸發if判斷式,這裡透過return空值來達到跳過後面程式碼,所以什麼也不會發生。
反之,當滑鼠移動到a連結上時,則他獨一無二的data-num會被變數num記錄起來。
然後讓色塊透明度從0變成1,之後因為原本就是使用絕對定位,透過不同的編號,編號0的話就是停在left:0的位置,因為每個a連結寬度都是一樣的,所以隨著編號的改變,色塊就會跑到對應的位置上。

nav.addEventListener('mouseout',function(){
    box.style.opacity = 0;
},false)

最後,當滑鼠移開導覽列時讓色塊消失。
這裡也展現了事件監聽的特色,可以在同一元素上綁定一個以上的事件。

---

本作品原典出自於:
https://forum.gamer.com.tw/

---

本日結語:
今天是十八天,今天主要是看到巴哈導覽列色塊會隨之移動覺得很有趣,就嘗試做做看,如有寫錯之處麻煩各路高手指教><


上一篇
【Day17】用JavaScript衝過終點線
下一篇
【Day19】用JavaScript算理想體重
系列文
每天一份前端小作品30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言